package com.zengqingfa.swagger.demo.controller;

import com.zengqingfa.swagger.demo.entity.ResObject;
import com.zengqingfa.swagger.demo.entity.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

/**
 * @author zengqingfa
 * @date 2019/10/9 10:40
 * @description
 * @email zengqingfa_java@163.com
 *
 * @Api 注解可以用来标记当前 Controller 的功能。
 * @ApiOperation 注解用来标记一个方法的作用。
 * @ApiImplicitParam 注解用来描述一个参数，可以配置参数的中文含义，也可以给参数设置默认值，这样在接口测试的时候可以避免手动输入。
 * 如果有多个参数，则需要使用多个 @ApiImplicitParam 注解来描述，多个 @ApiImplicitParam 注解需要放在一个 @ApiImplicitParams 注解中。
 * 需要注意的是，@ApiImplicitParam 注解中虽然可以指定参数是必填的，但是却不能代替
 * @RequestParam(required = true) ，前者的必填只是在 Swagger2 框架内必填，抛弃了 Swagger2 ，这个限制就没用了，所以假如开发者需要指定一个参数必填， @RequestParam(required = true) 注解还是不能省略。
 * 如果参数是一个对象（例如上文的更新接口），对于参数的描述也可以放在实体类中。
 */
@Api(produces = "用户接口")
@RestController
@RequestMapping("/user")
public class UserController {


    @ApiOperation(value = "新增用户" ,  notes="新增注册")
    @RequestMapping(value="/create",method=RequestMethod.POST,consumes= MediaType.APPLICATION_JSON_VALUE)
    public ResObject createUser(@RequestBody User user){
        return new ResObject(HttpStatus.OK.value(), "新增成功.");
    }

    @ApiOperation(value = "修改用户" ,  notes="修改用户")
    @RequestMapping(value="/update",method=RequestMethod.POST,consumes= MediaType.APPLICATION_JSON_VALUE)
    public ResObject updateUser(@RequestBody User user){
        return new ResObject(HttpStatus.OK.value(), "修改成功.");
    }

    @ApiOperation(value = "删除用户" ,  notes="删除用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId", value = "用户标识", required = true, paramType = "query", dataType = "String")
    })
    @RequestMapping(value="/delete",method=RequestMethod.DELETE)
    public ResObject deleteUser(@RequestParam("userId") String userId){
        return new ResObject(HttpStatus.OK.value(), "删除成功.");
    }

    @ApiOperation(value = "查询用户" ,  notes="查询用户")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId", value = "用户标识", required = true, paramType = "query", dataType = "String")
    })
    @RequestMapping(value="/query",method=RequestMethod.GET)
    public ResObject queryUser(@RequestParam("userId") String userId){
        User user = new User(userId, "zeng**", "******", "zengqingfa_java@163.com");
        return new ResObject(HttpStatus.OK.value(), user);
    }


}
